package note.sort;

import java.util.Scanner;

/**
 * @program: LeetCodePractice
 * @description: 排序算法类的模板
 * @author: WongKee
 * @create: 2020-08-26 21:44
 *
 * 排序成本模型：
 * 在研究排序算法时，我们需要计算比较和交换的数量
 * 对于不交换元素的算法，我们会计算访问数组的次数
 **/
abstract class Example {
    /**
    * @Description: 排序
    * @Param: [a]
    * @return: void
    * @Author: Wongkee
    * @Date: 2020/8/26
     *
     * 算法模板适用于任何实现了Comparable接口的数据类型
     *
    */
    abstract void sort(Comparable[] a);

    /**
    * @Description: 对元素进行比较
    * @Param: [v, w]
    * @return: boolean
    * @Author: Wongkee
    * @Date: 2020/8/26
    */
    protected static boolean less(Comparable v,Comparable w){
        return v.compareTo(w)<0;
    }

    protected static void exch(Comparable[] a,int i,int j){
        Comparable t=a[i];
        a[i]=a[j];
        a[j]=t;
    }

    /**
    * @Description: 打印数组
    * @Param: [a]
    * @return: void
    * @Author: Wongkee
    * @Date: 2020/8/26
    */
    protected  void show(Comparable[] a){
        for(int i=0;i<a.length;i++){
            System.out.print(a[i]+" ");
        }
        System.out.println();
    }

    /**
    * @Description: 测试数组元素是否有序
    * @Param: [a]
    * @return: boolean
    * @Author: Wongkee
    * @Date: 2020/8/27
    */
     protected   boolean isSorted(Comparable[] a){
        //测试数组元素是否有序
        for(int i=1;i<a.length;i++){
            if(less(a[i],a[i-1])) return false;
        }
        return true;
    }
}
